package com.company.design.create.singleton.concurrency;

/**
 * @author yingfing
 * @create 2020--09--26 16:16
 * @describe 单例模式 - 加锁版
 */
public class Singleton {
    // 1.私有静态实例 , 防止被引用 , 懒加载
    private static Singleton instance = null;

    // 2.私有化构造方法
    private Singleton() {

    }
    // 3.静态方法 , 创建实例

    /**
     * 加锁保证线程安全,不过性能会下降.因为每次调用 getInstance(), 都要对对象上锁
     * 事实上 , 只有在第一次创建对象的时候需要上锁,这个地方可以改进
     */
    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
